
package br.com.trabalho.controller;

import br.com.trabalho.banco.Transacoes;
import br.com.trabalho.entidades.Ingrediente;
import br.com.trabalho.entidades.Receita;
import br.com.trabalho.entidades.Usuario;
import br.com.trabalho.util.Util;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

@WebServlet("/new_recipe")
public class NovaReceita extends HttpServlet{
    
    protected void processa(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        HttpSession session = request.getSession();
        String url = "new_recipe.jsp";
        request.setCharacterEncoding("UTF-8");
        
        if(request.getParameter("edit")!=null){
            List<Receita> receitas =(List<Receita>) session.getAttribute(Util.receitas);
            Receita receita = Transacoes.getReceitaById(Integer.parseInt(request.getParameter("id")));
            
            List<String> categorias = new ArrayList<String>();
            categorias.add("Doces");
            categorias.add("Salgados");
            categorias.add("Aperitivos");
            categorias.add("Bebidas");
            categorias.add("Fast-food"); 
            
            List<String> ingredientesHTML = new ArrayList<>();
            
            String templateIngrediente = "<div id='ingrediente_#COUNT#'>"+
                "<input class='i_input' name='nomeIngrediente' placeholder='Nome do Ingrediente' type='text' value='#NAME#' required/>"+
                "<input class='i_input' name='qtdIngrediente' placeholder='Quantidade' type='number' value='#QTD#' required/>"+
                "<input class='i_input' name='unidadeIngrediente' placeholder='Unidade de Medida' type='text' value='#UNIT#' required/>"+
                "<button type='button' class='btn btn-sm btn-danger' onclick='removerIngrediente(#COUNT#);'>-</button><br/>"+
                "</div>";
                            
            for(int i=0;i<receita.getIngredientes().size();i++){
                 String first = templateIngrediente.replaceAll("#COUNT#", String.valueOf(i));
                 first = first.replaceAll("#NAME#", receita.getIngredientes().get(i).getNome());
                 first = first.replaceAll("#UNIT#", receita.getIngredientes().get(i).getUnidade());
                 first = first.replaceAll("#QTD#", receita.getIngredientes().get(i).getQuantidade().toString());
                 
                 ingredientesHTML.add(first);
            }
            
            session.setAttribute("INGREDIENTES_HTML", ingredientesHTML);
            session.setAttribute("CATEGORIAS", categorias);
            session.setAttribute("RECEITA_PARA_EDICAO", receita);
            url = "new_recipe.jsp?edit=true";
        }
        
        if(request.getParameter("cadastro")!=null || request.getParameter("edicao")!=null){
            Receita receita;          
            Usuario u = (Usuario) session.getAttribute(Util.user);

            List<Receita> receitas =(List<Receita>) session.getAttribute(Util.receitas);
            
            if(request.getParameter("edicao")==null){//não eh uma edição
                receita = new Receita();
                receita.setAutor(u);
            }else{//Eh uma edicao
                receita = Transacoes.getReceitaById(Integer.parseInt(request.getParameter("id")));
            }

            receita.setNome(request.getParameter("nome"));
            receita.setCategoria(request.getParameter("categoria"));
            receita.setValorNutricional(new Integer(request.getParameter("valorNutricional")));
            receita.setTempo(new Integer(request.getParameter("tempoPreparo")));
            receita.setPreparacao(request.getParameter("preparacao"));
            receita.setModoDeServir(request.getParameter("modoServir"));
            receita.setMetodoCozimento(request.getParameter("cozimento"));
            receita.setPorcoes(new Integer(request.getParameter("porcoes")));
            receita.setDescricao(request.getParameter("desc"));
            
            if(request.getParameter("acesso")!=null){
                if(request.getParameter("acesso").equals("on")){
                    receita.setDisponivel(true);
                }else{
                    receita.setDisponivel(false);
                }
            }
            else{
                receita.setDisponivel(false);
            }
            
            if(receita.getIngredientes().size()>0){
                for(Ingrediente i:receita.getIngredientes()){
                    Transacoes.removerIngrediente(i);
                }
                receita.setIngredientes(new ArrayList<Ingrediente>());
            }
            
            String[] nomes = request.getParameterValues("nomeIngrediente");
            String[] qtds = request.getParameterValues("qtdIngrediente");
            String[] unidades = request.getParameterValues("unidadeIngrediente");
            
            for (int i = 0; i < nomes.length && i<qtds.length && i<unidades.length; i++) {
                Ingrediente ingrediente = new Ingrediente();
                ingrediente.setNome(nomes[i]);
                ingrediente.setQuantidade(new Long(qtds[i]));
                ingrediente.setUnidade(unidades[i]);
                ingrediente.setReceita(receita);
                receita.getIngredientes().add(ingrediente);
            }
            receita.setMedia(new Long(0));
            
            if(request.getParameter("id")==null)
                Transacoes.inserirReceita(receita);
            else
                Transacoes.atualizarReceita(receita);
            
            u = Transacoes.getUsuarioById(u.getId());
            session.setAttribute(Util.user, u);
            url = "my_recipes?cadastroSucesso=true";
        }
        
        response.sendRedirect(url);               
    }    

    @Override
    protected void doGet(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        processa(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        processa(request, response);
    }
    
}
